# UpdateExecutor.java

    package org.codefilarete.stalactite.engine;

    import java.util.Collections;

    import org.codefilarete.tool.Duo;

    /**
     * @author Guillaume Mary
     */
    public interface UpdateExecutor<C> {

    	/**
    	 * Updates roughly given entity: no differences are computed, only update statements (full column) are applied.
    	 *
    	 * @param entity an entity
    	 */
    	default void updateById(C entity) {
    		updateById(Collections.singletonList(entity));
    	}

    	/**
    	 * Updates roughly some instances: no difference are computed, only update statements (all columns) are applied.
    	 * Hence optimistic lock (versioned entities) is not checked.
    	 *
    	 * @param entities iterable of entities
    	 * @apiNote used internally by
    	 * {@link org.codefilarete.stalactite.engine.runtime.CollectionUpdater#onRemovedTarget(org.codefilarete.stalactite.engine.runtime.CollectionUpdater.UpdateContext, org.codefilarete.stalactite.engine.diff.AbstractDiff)}
    	 */
    	void updateById(Iterable<? extends C> entities);

    	void update(Iterable<? extends Duo<C, C>> differencesIterable, boolean allColumnsStatement);
    }